home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 July: Mac OS SDK / Dev.CD Jul 96 SDK / Dev.CD Jul 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc Development Framework / ODFDev / ODF / Framewrk / FWPart / Include / FWLnkMgr.h < prev    next >
Encoding:
Text File  |  1996-04-25  |  7.7 KB  |  226 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWLnkMgr.h
  4. //    Release Version:    $ ODF 1 $
  5. //
  6. //    Copyright:            (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #ifndef FWLNKMGR_H
  11. #define FWLNKMGR_H
  12.  
  13. #ifndef FWLNKDST_H
  14. #include "FWLnkDst.h"
  15. #endif
  16.  
  17. #ifndef FWLNKSRC_H
  18. #include "FWLnkSrc.h"
  19. #endif
  20.  
  21. #ifndef FWPRTDEF_H
  22. #include "FWPrtDef.h"
  23. #endif
  24.  
  25. #ifndef FWSTDDEF_H
  26. #include "FWStdDef.h"
  27. #endif
  28.  
  29. #ifndef FWRUNTYP_H
  30. #include "FWRunTyp.h"
  31. #endif
  32.  
  33. #ifndef FWODTYPS_H
  34. #include "FWODTyps.h"
  35. #endif
  36.  
  37. //========================================================================================
  38. //    Forward Declarations
  39. //========================================================================================
  40.  
  41. class FW_CCloneInfo;
  42. class FW_CPart;
  43. class FW_CPartLinkSourceIterator;
  44. class FW_CPartLinkDestIterator;
  45. class FW_CLinkMgrLinkIterator;
  46. class FW_CPresentation;
  47. class FW_CLinkSource;
  48. class FW_CLinkDestination;
  49.  
  50. class ODLinkSource;
  51. class ODLink;
  52. class ODStorageUnit;
  53.  
  54.  
  55. //========================================================================================
  56. //    class FW_CLinkManager - abstract base class that manages Linking
  57. //========================================================================================
  58.  
  59. class FW_CLinkManager
  60. {
  61.     friend class FW_CPartLinkSourceIterator;
  62.     friend class FW_CPartLinkDestIterator;
  63.     friend class FW_CLinkMgrLinkSourceIterator;
  64.     friend class FW_CLinkMgrLinkDestIterator;
  65.  
  66.   public:
  67.     FW_DECLARE_AUTO(FW_CLinkManager)
  68.  
  69. //----------------------------------------------------------------------------------------
  70. //    Constructors/Destructors
  71. //
  72.   public:
  73.     FW_CLinkManager(Environment* ev, FW_CPart* thePart);
  74.     virtual ~FW_CLinkManager();
  75.  
  76.     void RemoveAllLinks(Environment* ev);
  77.  
  78. //----------------------------------------------------------------------------------------
  79. //    Methods that must be overridden
  80. //
  81.   public:
  82.     virtual FW_CLinkSource*         NewLinkSource(Environment* ev, 
  83.                                                 ODUpdateID updateID, 
  84.                                                 FW_CPresentation* presentation) = 0;
  85.     virtual FW_CLinkDestination*    NewLinkDestination(Environment* ev, 
  86.                                                 ODLink* odLink,
  87.                                                 ODLinkInfo* linkInfo,
  88.                                                 FW_CPresentation* presentation) = 0;
  89.  
  90.     virtual FW_CLinkSource*            DoInternalizeOneSourceLink(Environment* ev, 
  91.                                                 ODStorageUnit* storageUnit,
  92.                                                 ODUpdateID updateID);
  93.     virtual FW_CLinkDestination*    DoInternalizeOneDestLink(Environment* ev, ODStorageUnit* storageUnit,
  94.                                                 ODLink* odLink, ODLinkInfo* linkInfo);
  95.  
  96.     virtual ODValueType            GetSourceLinkFormat(Environment* ev) = 0;
  97.     virtual ODValueType            GetDestLinkFormat(Environment* ev) = 0;
  98.  
  99. //----------------------------------------------------------------------------------------
  100. //    Methods that may be overridden
  101. //
  102.   public:
  103.     virtual ODLinkSource*        CreateLink(Environment* ev, ODByteArray* data);
  104.  
  105.     virtual void                DoChangeLinkStatus(Environment* ev, ODFrame* odFrame);
  106.                                 // formerly named LinkStatusChanged
  107.  
  108.     virtual void                DoUpdateLinks(Environment* ev,
  109.                                               ODFrame* odEmbeddedFrame,
  110.                                               ODUpdateID updateID);
  111.                                 // formerly named EmbeddedFrameUpdated
  112.  
  113.     virtual FW_Boolean            EditInLinkAttempted(Environment* ev, ODFrame* odFrame);
  114.     virtual void                RevealLink(Environment* ev, ODLinkSource* odLinkSource);
  115.  
  116.   protected:
  117.     virtual FW_CLinkDestination* PrivMakeLink(Environment* ev,
  118.                                               ODLink* odLink,
  119.                                               ODPasteAsResult& pasteAsResult,
  120.                                               FW_CPresentation* presentation);
  121.  
  122. //----------------------------------------------------------------------------------------
  123. //    Methods that cannot be overridden
  124. //
  125.   public:
  126.     FW_CLinkDestination*        PasteWithLink(Environment* ev, ODStorageUnit* storageUnit, 
  127.                                               ODPasteAsResult& pasteAsResult,
  128.                                               FW_CFrame* frame,
  129.                                               FW_EStorageKinds storageKind);
  130.  
  131.     void                        BreakSourceLink(Environment* ev, FW_CLinkSource* linkSource);
  132.     void                        BreakDestinationLink(Environment* ev, FW_CLinkDestination* linkDest);
  133.  
  134.     void                        RestoreSourceLink(Environment* ev, FW_CLinkSource* linkSource);
  135.     void                        RestoreDestinationLink(Environment* ev, FW_CLinkDestination* linkDest);
  136.  
  137.     void                        ExternalizeLinks(Environment* ev, ODStorageUnit* su,
  138.                                                  FW_CCloneInfo* cloneInfo);
  139.     void                        InternalizeLinks(Environment* ev, ODStorageUnit* storageUnit);
  140.  
  141.     void                        InternalizeSourceLink(Environment* ev, ODID linkID,
  142.                                                     ODStorageUnit* storageUnit);
  143.     void                        InternalizeDestLink(Environment* ev, ODID linkID,
  144.                                                     ODStorageUnit* storageUnit);
  145.  
  146.     void                        RegisterLinks(Environment* ev);
  147.  
  148.   private:
  149.     void                        PrivInternalizeOneSourceLink(Environment* ev, ODStorageUnit* storageUnit);
  150.     void                        PrivInternalizeOneDestLink(Environment* ev, ODStorageUnit* storageUnit);
  151.  
  152. //----------------------------------------------------------------------------------------
  153. //    Utility methods
  154. //
  155.   public:
  156.     FW_CLinkSource*                GetPendingClipboardLink(Environment* ev) const;
  157.     void                        SetPendingClipboardLink(Environment* ev, FW_CLinkSource* linkSource);
  158.     void                        DeletePendingClipboardLink(Environment* ev);
  159.  
  160.     void                        AddToSourceLinkList(Environment* ev, FW_CLinkSource* linkSource);
  161.     void                        RemoveFromSourceLinkList(Environment* ev, FW_CLinkSource* linkSource);
  162.  
  163.     void                        AddToDestLinkList(Environment* ev, FW_CLinkDestination* linkDest);
  164.     void                        RemoveFromDestLinkList(Environment* ev, FW_CLinkDestination* linkDest);
  165.  
  166.     unsigned long                CountSourceLinks(Environment* ev) const;
  167.     unsigned long                CountDestinationLinks(Environment* ev) const;
  168.  
  169.     FW_CLinkSource*                ODtoFWLinkSource(Environment* ev, ODLinkSource* odLinkSource) const;
  170.     FW_CLinkDestination*        ODtoFWLink(Environment* ev, ODLink* odLink) const;
  171.  
  172.     FW_CLinkSource*                GetPendingDropLink(Environment* ev) const;
  173.     void                        SetPendingDropLink(Environment* ev, FW_CLinkSource* linkSource);
  174.  
  175. //----------------------------------------------------------------------------------------
  176. //    Data Members
  177. //
  178.   protected:
  179.     FW_CPart*                    fPart; 
  180.     FW_CLinkSource*                fPendingClipboardLink;
  181.  
  182.   private:
  183.     FW_CLinkSource*                fPendingDropLink;
  184.     FW_TOrderedCollection<FW_CLinkSource>*        fSourceLinkList;
  185.     FW_TOrderedCollection<FW_CLinkDestination>*    fDestLinkList;
  186. };
  187.  
  188.  
  189. //========================================================================================
  190. //    Inlines
  191. //========================================================================================
  192.  
  193. //----------------------------------------------------------------------------------------
  194. //    FW_CLinkManager::GetPendingClipboardLink
  195. //----------------------------------------------------------------------------------------
  196. inline FW_CLinkSource* FW_CLinkManager::GetPendingClipboardLink(Environment*) const
  197. {
  198.     return fPendingClipboardLink;
  199. }
  200.  
  201. //----------------------------------------------------------------------------------------
  202. //    FW_CLinkManager::SetPendingClipboardLink
  203. //----------------------------------------------------------------------------------------
  204. inline void FW_CLinkManager::SetPendingClipboardLink(Environment*, FW_CLinkSource* linkSource)
  205. {
  206.     fPendingClipboardLink = linkSource;
  207. }
  208.  
  209. //----------------------------------------------------------------------------------------
  210. //    FW_CLinkManager::GetPendingDropLink
  211. //----------------------------------------------------------------------------------------
  212. inline FW_CLinkSource* FW_CLinkManager::GetPendingDropLink(Environment*) const
  213. {
  214.     return fPendingDropLink;
  215. }
  216.  
  217. //----------------------------------------------------------------------------------------
  218. //    FW_CLinkManager::SetPendingDropLink
  219. //----------------------------------------------------------------------------------------
  220. inline void FW_CLinkManager::SetPendingDropLink(Environment*, FW_CLinkSource* linkSource)
  221. {
  222.     fPendingDropLink = linkSource;
  223. }
  224.  
  225. #endif
  226.